///////////////////////////////////////////////////////////////////////////////////////////////////
/// \file formic/fqmc/optimizer.h
///
/// \brief   header file for the energy optimization function
///
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef FORMIC_FQMC_OPTIMIZER_HEADER
#define FORMIC_FQMC_OPTIMIZER_HEADER

#include<boost/shared_ptr.hpp>

namespace formic {

  class InputBase;
  template<class S> class CoeffObj;

  namespace fqmc {

    template<class S> class Sampler;

    template<class S> void optimize(const formic::InputBase & userinp,
                                    boost::shared_ptr<formic::fqmc::Sampler<S> > & sampler,
                                    const boost::shared_ptr<formic::CoeffObj<S> > & co,
                                    const bool update_gf);

    template<class S> void optimize(const formic::InputBase & userinp,
                                    const boost::shared_ptr<formic::CoeffObj<S> > & co);

  }

}

#endif
